'use strict';
const businessState = require('../../../../application/service/businessState.js')
module.exports = {
	/**
	 * 此函数名称
	 * @url user/pub/test1 前端调用的url参数地址
	 * @description 此函数描述
	 * @params {Object} data 请求参数
	 * @params {String} uniIdToken 用户token
	 * @params {String} userInfo 当前登录用户信息（可信任，仅kh目录下的函数有此值）
	 * pub目录下请求参数需要带上 need_user_info = true
	 * @params {Object} util 公共工具包
	 * @params {Object} filterResponse 过滤器返回的数据
	 * @params {Object} originalParam 原始请求参数（包含了原始event和context）
	 * data 请求参数 说明
	 * @params {String} uid 当前登录用户id（可信任，仅kh目录下的函数有此值）
	 * res 返回参数说明
	 * @params {Number} code 错误码，0表示成功
	 * @params {String} msg 详细信息
	 */
	main: async (event) => {
		//  注意: userInfo 和 uid 是可信任的，但默认只有kh目录下的函数才有此值
		let { data = {}, userInfo, util, originalParam } = event;
		let { customUtil, config, pubFun, vk, db, _ } = util;
		let { uid } = data;
		let res = {
			code: 0,
			msg: '',
			data: {}
		};
		// 业务逻辑开始----------------------------------------------------------- 
		//课程主体
		res.data.courses = await vk.baseDao.findById({
			dbName: "course",
			id: data._id,
			whereJson: {
				is_show: 1,
				published_at: _.lte(pubFun.getNowTimeStr())
			}
		});

		// 用户历史记录
		let sonWhere = {}
		if (uid != null) sonWhere['user_id'] = uid

		// 章节信息
		res.data.test = await vk.baseDao.selects({
			dbName: "course_chapter",
			getMain: true,
			pageSize: 9999,
			fieldJson: { title: true },
			whereJson: { course_id: data._id },
			// 视频 和 讲义
			foreignDB: [{
				dbName: "course_videos",
				localKey: "_id",
				foreignKey: "chapter_id",
				as: "videos",
				fieldJson: { url: true, title: true, duration: true, free_seconds: true },
				whereJson: { course_id: data._id, is_show: 1 },
				sortArr: [{ "name": "sort", "type": "desc" }],
				// 观看情况
				foreignDB: [{
					dbName: "user_video_watch_records",
					localKey: "_id",
					foreignKey: "video_id",
					as: "watch_info",
					limit: 1,
					fieldJson: { _id: true },
					whereJson: sonWhere
				}]
			}, {
				dbName: "course_words",
				localKey: "_id",
				foreignKey: "chapter_id",
				as: "word",
				limit: 1,
				fieldJson: { url: true, title: true },
				whereJson: { course_id: data._id, is_show: 1 }
			}]
		});

		//获取用户课程购买情况
		res.data.has_buy = await businessState.hasBuyCourses(event, data._id, userInfo)
		if (uid != null) {
			let info = await vk.baseDao.findByWhereJson({
				dbName: "user_goods",
				whereJson: { goods_id: data._id, user_id: uid }
			})
			if (info != null) res.data.endTime = info.end_time
		}

		// 获取收藏状态
		if (uid == null) {
			res.data.star = 0
		} else {
			let info = await vk.baseDao.findByWhereJson({
				dbName: "user-star",
				whereJson: {
					user_id: uid,
					course_id: data._id
				}
			});
			res.data.star = info ? 1 : 0
		}

		// 业务逻辑结束-----------------------------------------------------------
		return res;
	}
}
